home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Ken Long / NewShuttle-p-c / NewShuttle.µ.c < prev    next >
Encoding:
Text File  |  1994-12-04  |  17.6 KB  |  418 lines  |  [TEXT/MMCC]

  1. //• NewShuttle.c
  2.  
  3. //• Wire frame shuttle viewer
  4. //• by Eddy Vasile 70451,3333 compuserve
  5. //• Plot points collected from a fortran bbs in 86
  6. //• Ported to Think C™ on 22 June 1993 By Kenneth A.Long.
  7.  
  8. //• A note from Ken Long:
  9. //• This was my first successfull Pascal to C port!  I did have a bit of
  10. //• help from Mark Hanrek, of AOL fame (he likes to help novice programmers).
  11. //• I guess I'm going to have to stop calling myself a "novice" because I'm
  12. //• learning too much!  But I this to help other beginning  C programmers.
  13. //• There's nothing special about this source code, so it's public domain.
  14. //• I added a 'BNDL' and some color icons, for effect.
  15. //• I hope you have as much fun fiddling with this program as I did!
  16. //• I'm a self-taught C programmer and Pascal porter.
  17.  
  18.  
  19. //• program ShuttleViewer;
  20.  
  21. #include <math.h>
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24.  
  25. int     main (void);
  26. void     Do_Init_Managers (void);
  27. void     Set_Up_Window (void);
  28. int     Init_Variables (void);
  29. int        Main_Event_Loop (void);
  30.  
  31. int     Calculate_1 (void);
  32. int     Calculate_2 (void);
  33. int     Calculate_3 (void);
  34. int     Set_Data_Array (void);
  35.  
  36. //************************************************************************
  37.  
  38. #define Max_A    300
  39. #define Max_B    124
  40. #define Max_C    259
  41. #define Max_D    631
  42. #define r1        400
  43.  
  44. short o_X_angle, o_Y_angle, o_Z_angle, Pc, Ec;
  45.  
  46. float     CH, SH, CP, SP, CB, SB, 
  47.         XV, YV, ZV, 
  48.         X, Y, Z, 
  49.         X3, Y3, Z3, 
  50.         AM, BM, CM, DM, EM, FM, GM, HM, IM, 
  51.         D, P, B, H, U, 
  52.         Vc, 
  53.         U1, V1;
  54.  
  55. double V[Max_A + 1][3];
  56. double E[Max_A + 1];
  57. double data[Max_D];
  58.  
  59. WindowPtr     window;
  60. long         ticks;
  61.  
  62. main (void)
  63. {
  64.     Do_Init_Managers ();
  65.     Set_Data_Array ();
  66.     Init_Variables ();
  67.     Set_Up_Window ();
  68.     Main_Event_Loop ();
  69.     ExitToShell ();
  70. }
  71.  
  72. void Do_Init_Managers (void)
  73. {
  74.     MaxApplZone ();
  75.  
  76.     InitGraf (&qd.thePort);
  77.     InitFonts ();
  78.     InitWindows ();
  79.     InitMenus ();
  80.     TEInit ();
  81.     InitDialogs (nil);
  82.     InitCursor ();
  83. }
  84.  
  85. int Init_Variables ()
  86. {
  87.     short position, j, Ec, Pc;
  88.  
  89.     position = 0;
  90.     for (Pc = 1; Pc <= Max_B; Pc++)
  91.     {
  92.         for (j = 0; j < 3; j++)
  93.         {
  94.             position = position + 1;
  95.             V [Pc] [j] = data [position] * 0.12;     //• This number controls
  96.         }                                            //• scale.  Try "0.2"
  97.     }
  98.     for (Ec = 0; Ec < Max_C; Ec++)
  99.     {
  100.         position = position + 1;
  101.         E [Ec] = data [position];
  102.     }
  103. }
  104.  
  105. void Set_Up_Window (void)
  106. {
  107.     window = GetNewWindow (r1, nil, (WindowPtr)-1L);
  108.     ShowWindow (window);
  109.     SetPort (window);
  110.     
  111.     MoveTo(200, 170);
  112.     TextSize(10);
  113.     DrawString("\pWait for a couple of views before clicking.");
  114.     
  115.     MoveTo (10, 250);
  116.     TextSize (14);
  117.     TextFace (shadow);
  118.     DrawString ("\pEddy and Kenny's Shuttle Viewer ");
  119.     
  120.     MoveTo (20, 270);
  121.     TextSize (12);
  122.     TextFace (bold);
  123.     DrawString ("\pClick and hold button down to STOP (wait a couple of views).");
  124.  
  125.     MoveTo (30, 290);
  126.     TextSize (10);
  127.     TextFace (italic);
  128.  
  129.     DrawString ("\pThink Pascal Code by Eddy Vasile. Plot Points from anonymous source.");
  130.     MoveTo (40, 310);
  131.     TextSize (12);
  132.     TextFace (bold);
  133.  
  134.     DrawString ("\pPorted to Code Warrior by Ken Long, 20 Nov 1994");
  135.     PenNormal ();
  136.     TextMode (srcCopy); //• black text with white background
  137.     TextSize (9);
  138.     TextFont (monaco);
  139.     TextFace (0);
  140.     Delay(100, &ticks);        //• Delay between views.
  141. }
  142.  
  143. //************************************************************************
  144.  
  145. int Main_Event_Loop ()
  146. {
  147.     Rect frameRect, shuttleRect;
  148.     
  149.     SetRect (&frameRect, 160, 2, 505, 211);
  150.     FrameRect (&frameRect);
  151.     SetRect (&shuttleRect, 163, 5, 502, 208);
  152.     while (! Button ())
  153.     {
  154.         BackColor (blackColor);
  155.         ForeColor (whiteColor);        //• Try redColor, if you have color.
  156.         EraseRect(&shuttleRect);
  157.         Calculate_3 ();
  158.         Delay (50, &ticks);
  159.         o_X_angle = o_X_angle + 10;
  160.         o_Y_angle = o_Y_angle + 10;
  161.         o_Z_angle = o_Z_angle + 10;
  162.     }
  163. }
  164.  
  165.  
  166.  
  167. //************************************************************************
  168.  
  169. int Calculate_1 (void)
  170. {
  171.     CH =  cos (H);
  172.     SH =  sin (H);
  173.     CP =  cos (P);
  174.     SP =  sin (P);
  175.     CB =  cos (B);
  176.     SB =  sin (B);
  177.     AM =  CB * CH - SH * SP * SB;
  178.     BM = -CB * SH - SP * CH * SB;
  179.     CM =  CP * SB;
  180.     DM =  SH * CP;
  181.     EM =  CP * CH;
  182.     FM =  SP;
  183.     GM = -CH * SB - SH * SP * CB;
  184.     HM =  SH * SB - SP * CH * CB;
  185.     IM =  CP * CB;
  186. }
  187.  
  188. //************************************************************************
  189.  
  190. int Calculate_2 ()
  191. {
  192.     X  = X - XV;
  193.     Y  = Y - YV;
  194.     Z  = Z - ZV;
  195.     X3 = AM * X + BM * Y + CM * Z;
  196.     Y3 = DM * X + EM * Y + FM * Z;
  197.     Z3 = GM * X + HM * Y + IM * Z;
  198.     U  = 135 + 13.5 * D * X3 / Y3;    //• Shuttle stretch/shrink width.
  199.     Vc = 80 - 12.5 * D * Z3 / Y3;    //• Shuttle stretch/shrink length.
  200. }                                    //• (Use 1st or 2nd number.)
  201.  
  202. //************************************************************************
  203.  
  204. int Calculate_3 ()
  205. {
  206.     short     Ec;
  207.     short temp_X, temp_Y, current_line = 1, current_column = 0;
  208.     Str255    number_string;
  209.  
  210.     X  = 0;
  211.     Y  = 0;
  212.     Z  = 0;
  213.     X3 = 0;
  214.     Y3 = 0;
  215.     Z3 = 0;
  216.     AM = 0;
  217.     BM = 0;
  218.     CM = 0;
  219.     DM = 0;
  220.     EM = 0;
  221.     FM = 0;
  222.     GM = 0;
  223.     HM = 0;
  224.     IM = 0;
  225.     D  = 0;
  226.     P  = 0;
  227.     B  = 0;
  228.     H  = 0;
  229.     U  = 0;
  230.     Vc = 0;
  231.     U1 = 0;
  232.     V1 = 0;
  233.     D  = 120;
  234.     P  = 6.28 * o_X_angle / 255 - 3.1416;    //• Remove "- 3.1416" to start
  235.     B  = 6.28 * o_Z_angle / 255;            //• with nose-up view.
  236.     H  = 6.28 * o_Y_angle / 255;
  237.  
  238.     Calculate_1 ();
  239.     XV = - D * CP * SH;
  240.     YV = - D * CP * CH;
  241.     ZV = - D * SP;
  242.     for (Ec = 0; Ec < Max_C; Ec++)        //• Starting point.
  243.     {
  244.         X = V [abs (ceil (E [Ec]))] [0];
  245.         Y = V [abs (ceil (E [Ec]))] [1];
  246.         Z = V [abs (ceil (E [Ec]))] [2];
  247.  
  248.         Calculate_2 ();
  249.  
  250.         if (E [Ec] > 0)
  251.         {
  252.             MoveTo (ceil (U1 * 2 + 60), ceil (V1 + 40));    //• Left and top.
  253.             LineTo (ceil (U  * 2 + 60), ceil (Vc + 40));    //• Left and top.
  254.         }
  255.         U1 = U;
  256.         V1 = Vc;
  257. //•        Delay (5, &ticks);    //• I left this out but uncomment for slowDraw.
  258.     }
  259. }
  260.  
  261. //************************************************************************
  262.  
  263. int Set_Data_Array (void)
  264. {
  265.     data[  1] =    0; data[  2] =   -2; data[  3] =   46; data[  4] =    2;
  266.     data[  5] =   -3; data[  6] =   46; data[  7] =    2; data[  8] =   -5;
  267.     data[  9] =   46; data[ 10] =    2; data[ 11] =   -7; data[ 12] =   46;
  268.     data[ 13] =    0; data[ 14] =   -7; data[ 15] =   46; data[ 16] =   -2;
  269.     data[ 17] =   -7; data[ 18] =   46; data[ 19] =   -2; data[ 20] =   -5;
  270.     data[ 21] =   46; data[ 22] =   -2; data[ 23] =   -3; data[ 24] =   46;
  271.     data[ 25] =    0; data[ 26] =   -1; data[ 27] =   43; data[ 28] =    3;
  272.     data[ 29] =   -2; data[ 30] =   43; data[ 31] =    4; data[ 32] =   -5;
  273.     data[ 33] =   43; data[ 34] =    3; data[ 35] =   -7; data[ 36] =   43;
  274.     data[ 37] =    0; data[ 38] =   -8; data[ 39] =   43; data[ 40] =   -3;
  275.     data[ 41] =   -7; data[ 42] =   43; data[ 43] =   -4; data[ 44] =   -5;
  276.     data[ 45] =   43; data[ 46] =   -3; data[ 47] =   -2; data[ 48] =   43;
  277.     data[ 49] =    0; data[ 50] =    2; data[ 51] =   38; data[ 52] =    5;
  278.     data[ 53] =    0; data[ 54] =   38; data[ 55] =    6; data[ 56] =   -4;
  279.     data[ 57] =   38; data[ 58] =    4; data[ 59] =   -8; data[ 60] =   38;
  280.     data[ 61] =    0; data[ 62] =   -9; data[ 63] =   38; data[ 64] =   -4;
  281.     data[ 65] =   -8; data[ 66] =   38; data[ 67] =   -6; data[ 68] =   -4;
  282.     data[ 69] =   38; data[ 70] =   -5; data[ 71] =    0; data[ 72] =   38;
  283.     data[ 73] =    0; data[ 74] =    4; data[ 75] =   33; data[ 76] =    5;
  284.     data[ 77] =    1; data[ 78] =   33; data[ 79] =    6; data[ 80] =   -5;
  285.     data[ 81] =   33; data[ 82] =    4; data[ 83] =   -9; data[ 84] =   33;
  286.     data[ 85] =    0; data[ 86] =  -10; data[ 87] =   33; data[ 88] =   -4;
  287.     data[ 89] =   -9; data[ 90] =   33; data[ 91] =   -6; data[ 92] =   -5;
  288.     data[ 93] =   33; data[ 94] =   -5; data[ 95] =    1; data[ 96] =   33;
  289.     data[ 97] =    0; data[ 98] =    8; data[ 99] =   26; data[100] =    4;
  290.     data[101] =    7; data[102] =   26; data[103] =    8; data[104] =    2;
  291.     data[105] =   26; data[106] =    8; data[107] =   -7; data[108] =   26;
  292.     data[109] =    0; data[110] =  -10; data[111] =   26; data[112] =   -8;
  293.     data[113] =   -7; data[114] =   26; data[115] =   -8; data[116] =    2;
  294.     data[117] =   26; data[118] =   -4; data[119] =    7; data[120] =   26;
  295.     data[121] =    0; data[122] =    8; data[123] =   22; data[124] =    4;
  296.     data[125] =    8; data[126] =   22; data[127] =    8; data[128] =    3;
  297.     data[129] =   22; data[130] =    8; data[131] =   -8; data[132] =   22;
  298.     data[133] =    0; data[134] =  -10; data[135] =   22; data[136] =   -8;
  299.     data[137] =   -8; data[138] =   22; data[139] =   -8; data[140] =    3;
  300.     data[141] =   22; data[142] =   -4; data[143] =    8; data[144] =   22;
  301.     data[145] =    0; data[146] =    8; data[147] =   14; data[148] =    5;
  302.     data[149] =    7; data[150] =   14; data[151] =    8; data[152] =    4;
  303.     data[153] =   14; data[154] =    8; data[155] =   -9; data[156] =   14;
  304.     data[157] =    0; data[158] =  -10; data[159] =   14; data[160] =   -8;
  305.     data[161] =   -9; data[162] =   14; data[163] =   -8; data[164] =    4;
  306.     data[165] =   14; data[166] =   -5; data[167] =    7; data[168] =   14;
  307.     data[169] =    0; data[170] =    8; data[171] =    4; data[172] =    5;
  308.     data[173] =    7; data[174] =    4; data[175] =    8; data[176] =    4;
  309.     data[177] =    4; data[178] =    8; data[179] =   -9; data[180] =    4;
  310.     data[181] =    0; data[182] =  -10; data[183] =    4; data[184] =   -8;
  311.     data[185] =   -9; data[186] =    4; data[187] =   -8; data[188] =    4;
  312.     data[189] =    4; data[190] =   -5; data[191] =    7; data[192] =    4;
  313.     data[193] =    0; data[194] =    8; data[195] =  -12; data[196] =    5;
  314.     data[197] =    7; data[198] =  -12; data[199] =    8; data[200] =    4;
  315.     data[201] =  -12; data[202] =    8; data[203] =   -9; data[204] =  -12;
  316.     data[205] =    0; data[206] =  -10; data[207] =  -12; data[208] =   -8;
  317.     data[209] =   -9; data[210] =  -12; data[211] =   -8; data[212] =    4;
  318.     data[213] =  -12; data[214] =   -5; data[215] =    7; data[216] =  -12;
  319.     data[217] =    0; data[218] =    8; data[219] =  -27; data[220] =    5;
  320.     data[221] =    7; data[222] =  -27; data[223] =    8; data[224] =    4;
  321.     data[225] =  -27; data[226] =    8; data[227] =   -9; data[228] =  -27;
  322.     data[229] =    0; data[230] =  -10; data[231] =  -27; data[232] =   -8;
  323.     data[233] =   -9; data[234] =  -27; data[235] =   -8; data[236] =    4;
  324.     data[237] =  -27; data[238] =   -5; data[239] =    7; data[240] =  -27;
  325.     data[241] =    0; data[242] =    8; data[243] =  -36; data[244] =    5;
  326.     data[245] =    7; data[246] =  -36; data[247] =    8; data[248] =    4;
  327.     data[249] =  -36; data[250] =    8; data[251] =   -9; data[252] =  -36;
  328.     data[253] =    0; data[254] =  -10; data[255] =  -36; data[256] =   -8;
  329.     data[257] =   -9; data[258] =  -36; data[259] =   -8; data[260] =    4;
  330.     data[261] =  -36; data[262] =   -5; data[263] =    7; data[264] =  -36;
  331.     data[265] =    0; data[266] =    9; data[267] =  -43; data[268] =    2;
  332.     data[269] =    9; data[270] =  -43; data[271] =    9; data[272] =    2;
  333.     data[273] =  -43; data[274] =    9; data[275] =  -10; data[276] =  -43;
  334.     data[277] =    0; data[278] =  -11; data[279] =  -43; data[280] =   -9;
  335.     data[281] =  -10; data[282] =  -43; data[283] =   -9; data[284] =    2;
  336.     data[285] =  -43; data[286] =   -2; data[287] =    9; data[288] =  -43;
  337.     data[289] =    0; data[290] =   10; data[291] =  -48; data[292] =    2;
  338.     data[293] =    9; data[294] =  -48; data[295] =    9; data[296] =    2; 
  339.     data[297] =  -48; data[298] =   10; data[299] =  -10; data[300] =  -48; 
  340.     data[301] =    0; data[302] =  -10; data[303] =  -48; data[304] =  -10; 
  341.     data[305] =  -10; data[306] =  -48; data[307] =   -9; data[308] =    2; 
  342.     data[309] =  -48; data[310] =   -2; data[311] =    9; data[312] =  -48; 
  343.     data[313] =    9; data[314] =   -9; data[315] =   21; data[316] =   15; 
  344.     data[317] =   -9; data[318] =  -16; data[319] =   35; data[320] =  -10;
  345.     data[321] =  -36; data[322] =   35; data[323] =  -10; data[324] =  -40;
  346.     data[325] =   -9; data[326] =   -9; data[327] =   21; data[328] =  -15;
  347.     data[329] =   -9; data[330] =  -16; data[331] =  -35; data[332] =  -10;
  348.     data[333] =  -36; data[334] =  -35; data[335] =  -10; data[336] =  -40;
  349.     data[337] =    0; data[338] =   13; data[339] =  -37; data[340] =    0;
  350.     data[341] =   33; data[342] =  -60; data[343] =    0; data[344] =   33;
  351.     data[345] =  -69; data[346] =    0; data[347] =   14; data[348] =  -60;
  352.     data[349] =    6; data[350] =   11; data[351] =  -43; data[352] =    6;
  353.     data[353] =   11; data[354] =  -48; data[355] =   11; data[356] =    5;
  354.     data[357] =  -43; data[358] =   11; data[359] =    5; data[360] =  -48;
  355.     data[361] =   -6; data[362] =   11; data[363] =  -43; data[364] =   -6;
  356.     data[365] =   11; data[366] =  -48; data[367] =  -11; data[368] =    5;
  357.     data[369] =  -43; data[370] =  -11; data[371] =    5; data[372] =  -48;
  358.     data[373] =   -1; data[374] =    2; data[375] =    3; data[376] =    4;
  359.     data[377] =    5; data[378] =    6; data[379] =    7; data[380] =    8;
  360.     data[381] =    1; data[382] =   -9; data[383] =   10; data[384] =   11;
  361.     data[385] =   12; data[386] =   13; data[387] =   14; data[388] =   15;
  362.     data[389] =   16; data[390] =    9; data[391] =  -17; data[392] =   18;
  363.     data[393] =   19; data[394] =   20; data[395] =   21; data[396] =   22;
  364.     data[397] =   23; data[398] =   24; data[399] =   17; data[400] =  -25;
  365.     data[401] =   26; data[402] =   27; data[403] =   28; data[404] =   29;
  366.     data[405] =   30; data[406] =   31; data[407] =   32; data[408] =   25;
  367.     data[409] =  -33; data[410] =   34; data[411] =   35; data[412] =   36;
  368.     data[413] =   37; data[414] =   38; data[415] =   39; data[416] =   40;
  369.     data[417] =   33; data[418] =  -41; data[419] =   42; data[420] =   43;
  370.     data[421] =   44; data[422] =   45; data[423] =   46; data[424] =   47;
  371.     data[425] =   48; data[426] =   41; data[427] =  -49; data[428] =   50;
  372.     data[429] =   51; data[430] =   52; data[431] =   53; data[432] =   54;
  373.     data[433] =   55; data[434] =   56; data[435] =   49; data[436] =  -57;
  374.     data[437] =   58; data[438] =   59; data[439] =   60; data[440] =   61;
  375.     data[441] =   62; data[442] =   63; data[443] =   64; data[444] =   57;
  376.     data[445] =  -65; data[446] =   66; data[447] =   67; data[448] =   68;
  377.     data[449] =   69; data[450] =   70; data[451] =   71; data[452] =   72;
  378.     data[453] =   65; data[454] =  -73; data[455] =   74; data[456] =   75;
  379.     data[457] =   76; data[458] =   77; data[459] =   78; data[460] =   79;
  380.     data[461] =   80; data[462] =   73; data[463] =  -81; data[464] =   82;
  381.     data[465] =   83; data[466] =   84; data[467] =   85; data[468] =   86;
  382.     data[469] =   87; data[470] =   88; data[471] =   81; data[472] =  -89;
  383.     data[473] =   90; data[474] =   91; data[475] =   92; data[476] =   93;
  384.     data[477] =   94; data[478] =   95; data[479] =   96; data[480] =   89;
  385.     data[481] =  -97; data[482] =   98; data[483] =   99; data[484] =  100;
  386.     data[485] =  101; data[486] =  102; data[487] =  103; data[488] =  104;
  387.     data[489] =   97; data[490] =   -1; data[491] =    9; data[492] =   17;
  388.     data[493] =   25; data[494] =   33; data[495] =   41; data[496] =   49;
  389.     data[497] =   57; data[498] =   65; data[499] =   73; data[500] =   81;
  390.     data[501] =   89; data[502] =   97; data[503] =   -2; data[504] =   10;
  391.     data[505] =   18; data[506] =   26; data[507] =   34; data[508] =   42;
  392.     data[509] =   50; data[510] =   58; data[511] =   66; data[512] =   74;
  393.     data[513] =   82; data[514] =   90; data[515] =   98; data[516] =   -3;
  394.     data[517] =   11; data[518] =   19; data[519] =   27; data[520] =   35;
  395.     data[521] =   43; data[522] =   51; data[523] =   59; data[524] =   67;
  396.     data[525] =   75; data[526] =   83; data[527] =   91; data[528] =   99;
  397.     data[529] =   -4; data[530] =   12; data[531] =   20; data[532] =   28;
  398.     data[533] =   36; data[534] =   44; data[535] =   52; data[536] =   60;
  399.     data[537] =   68; data[538] =   76; data[539] =   84; data[540] =   92;
  400.     data[541] =  100; data[542] =   -5; data[543] =   13; data[544] =   21;
  401.     data[545] =   29; data[546] =   37; data[547] =   45; data[548] =   53;
  402.     data[549] =   61; data[550] =   69; data[551] =   77; data[552] =   85;
  403.     data[553] =   93; data[554] =  101; data[555] =   -6; data[556] =   14;
  404.     data[557] =   22; data[558] =   30; data[559] =   38; data[560] =   46;
  405.     data[561] =   54; data[562] =   62; data[563] =   70; data[564] =   78;
  406.     data[565] =   86; data[566] =   94; data[567] =  102; data[568] =   -7;
  407.     data[569] =   15; data[570] =   23; data[571] =   31; data[572] =   39;
  408.     data[573] =   47; data[574] =   55; data[575] =   63; data[576] =   71;
  409.     data[577] =   79; data[578] =   87; data[579] =   95; data[580] =  103;
  410.     data[581] =   -8; data[582] =   16; data[583] =   24; data[584] =   32;
  411.     data[585] =   40; data[586] =   48; data[587] =   56; data[588] =   64;
  412.     data[589] =   72; data[590] =   80; data[591] =   88; data[592] =   96;
  413.     data[593] =  104; data[594] =  -44; data[595] =  105; data[596] =  106;
  414.     data[597] =  107; data[598] =  108; data[599] =   92; data[600] =  -46;
  415.     data[601] =  109; data[602] =  110; data[603] =  111; data[604] =  112;
  416.     data[605] =   94; data[606] =  -81; data[607] =  113; data[608] =  114;
  417.     data[609] =  115; data[610] =  116; data[611] =   89; data[612] =  -82;
  418.     data[613] =  117; data[614] =  118; data[615] =  -83; data[616] =  1